package com.banyuan.array;

import java.util.Arrays;

public class CreatArrayTest {
    public static void main(String[] args) {
        //打印某个数组能被3整除的数
        int[] arr1 = new int[]{2, 34, 1, 455, 6, 23, 6, 234, 54, 2};
        for (int i : arr1) {
            if (i % 3 == 0) {
                System.out.println(i);
            }
        }

        for (int i = 0; i < arr1.length; i++) {
            if (arr1[i] % 3 == 0) {
                System.out.println("arr[" + i + "]" + ":" + arr1[i]);
            }
        }

        //计算数组里所有元素只和
        int sum1 = 0;
        for (int i : arr1) {
            sum1 += i;
        }
        System.out.println(sum1);

        int sum2 = 0;
        for (int i = 0; i < arr1.length; i++) {
            sum2 += arr1[i];
        }
        System.out.println(sum2);

        //顺序查找某一个数在数组中所占位置的下标，如果不存在则打印-1
        boolean flag = false;
        for (int i = 0; i < arr1.length; i++) {
            if (arr1[i] == 8) {
                System.out.println(8 + "在数组中所占的位置是：" + i + "；");
                flag = true;
            }

        }
        if (!flag) {
            System.out.println(-1);
        }
        //方法2
        /*int count = -1;
        for (int i = 0; i < arr1.length; i++) {
            if (arr1[i] == 8) {
                System.out.println(8 + "在数组中所占的位置是：" + i + "；");
               count = i;
            }

        }
        if (count == -1) {
            System.out.println(-1);
        }*/

        //找到数组中元素的最大值和最小值，将这两个数值交换位置，假定数组中所有的值都不重复
        //先找到数组中的最大值和最小值，并记录他们的index
        int[] arr2 = new int[]{2, 23, 3, 5, 111};
        int min = arr2[0];
        int minIndex = 0;
        int max = arr2[arr2.length - 1];
        int maxIndex = arr2.length - 1;
        int temp = 0;
        //可以使用arr2[minIndex]来表示min或者max
        for (int i = 0; i < arr2.length; i++) {
            if (min > arr2[i]) {
                min = arr2[i];
                minIndex = i;
            }
            if (max < arr2[i]) {
                max = arr2[i];
                maxIndex = i;
            }
        }
        //交换两个记录的index的数组的元素
        temp = arr2[minIndex];
        arr2[minIndex] = arr2[maxIndex];
        arr2[maxIndex] = temp;
        System.out.println(Arrays.toString(arr2));

        //创建一个数组，该数组是原数组长度的两倍，将原数组里面的元素复制到新数组中
        int[] arr3 = new int[arr2.length * 2];
        for (int i = 0; i < arr2.length; i++) {
            arr3[i] = arr2[i];
            arr3[arr2.length + i] = arr2[i];
        }
        System.out.println(Arrays.toString(arr3));
        //jdk的一些方法
        int[] arr4 = new int[arr2.length * 2];
        System.arraycopy(arr2, 0, arr4, 0, arr2.length);
        System.out.println(Arrays.toString(arr4));
/*        System.arraycopy(arr2, 0, arr4, 0, arr4.length);
        System.arraycopy(arr2, 0, arr4, 0, arr2.length*2);
        System.out.println(Arrays.toString(arr4));
        上面的两种方法都会导致
        Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: arraycopy: last source index 10 out of bounds for int[5]
	at java.base/java.lang.System.arraycopy(Native Method)
	at com.banyuan.array.CreatArrayTest.main(CreatArrayTest.java:95)
   这种异常的抛出
        */


        int[] arr5 = Arrays.copyOf(arr2, arr2.length * 2);
        System.out.println(Arrays.toString(arr5));

        //往新数组头部插入一个数字1
        //创建一个新数组，长度是arr2数组的长度+1
        int[] arr6 = new int[arr2.length + 1];
        //调用System包中的arraycopy方法，将arr2数组复制到arr6数组中的arr6[1]到arr6[arr6.length-1]的位置
        System.arraycopy(arr2, 0, arr6, 1, arr2.length);
        //在arr6的第一位插入一个1
        arr6[0] = 1;
        //打印arr6数组
        System.out.println(Arrays.toString(arr6));

        //System.arraycopy可以对原数组进行移动元素的操作
        //对arr5数组的头部加1，arr5.length-1为了防止数组越界
        System.arraycopy(arr5, 0, arr5, 1, arr5.length - 1);


    }
}
